#include <iostream>
#include <assert.h>
#include <vector>
#include <string>
#include <map>
#include <set>

using namespace std;

#include "RBTree.h"
#include "Map.h"
#include "Set.h"

//void test1()
//{
//	int arr[] = { 45,1,7,67,34,76,2,9,0,6,16 };
//	RBTree<int, int> r1;
//
//	for (auto e : arr)
//	{
//		r1.insert(make_pair(e, e));
//		r1.InOrder();
//		cout << endl;
//	}
//	//cout << r1.GetRotateNum() << endl;
//}
//
//void test2()
//{
//	const int N = 1000;
//	srand(time(0));
//
//	RBTree<int, int> r;
//	for (int i = 0; i < N; i++)
//	{
//		int randnum = rand();
//		r.insert(make_pair(randnum, randnum));
//		cout << randnum << ' ' << r.IsRBTree() << endl;
//	}
//
//	r.InOrder();
//
//	cout << r.IsRBTree() << endl;
//	//cout << "旋转次数: " << r.GetRotateNum() << endl;
//}
//
//void test3()
//{
//	const int N = 10000000;
//	srand(time(0));
//
//	vector<int> v;
//	v.reserve(N);
//
//	int n = 0;
//	for (int i = 0; i < N; i++)
//	{
//		v.push_back(rand() + n);
//		n++;
//	}
//
//	RBTree<int, int> rbt;
//	AVLTree<int, int> avlt;
//
//	for (auto e : v)
//	{
//		rbt.insert(make_pair(e, e));
//		avlt.Insert(make_pair(e, e));
//	}
//
//	cout << "红黑树的旋转次数：" << rbt.GetRotateNum() << endl;
//	cout << "红黑树的高度：" << rbt.Height() << endl;
//	cout << endl;
//	cout << "AVL树的旋转次数：" << avlt.GetRotateNum() << endl;
//	cout << "AVL树的高度：" << avlt.Height() << endl;
//}

const int N = 1000;

void test4()
{
	my_set::set<int> s;
	vector<int> v;
	v.reserve(N);

	srand(time(0));

	int n = 0;
	for (int i = 0; i < N; i++)
	{
		v.push_back(rand() + n);
		n++;
	}

	for (auto e : v)
	{
		s.insert(e);
	}

	my_set::set<int>::iterator it1 = s.begin();
	while (it1 != s.end())
	{
		cout << *it1 << endl;
		//(*it1)++; 
		//*it1 += 10;
		++it1;
	}
	cout << endl;
}

void testmap()
{
	map<int, int> m;
	m.insert(make_pair(1, 1));
	auto i = m.begin();
	cout << i->first << ' ' << i->second;
}

void test5()
{
	my_map::map<int, int> m;
	vector<int> v;
	srand(time(0));

	int n = 0;
	for (int i = 0; i < N; i++)
	{
		v.push_back(rand() + n);
		n++;
	}

	for (auto e : v)
	{
		m.insert(make_pair(e, e));
	}

	my_map::map<int, int>::iterator it = m.begin();
	while (it != m.end())
	{
		cout << it->first << ':' << it->second << endl;
		++it;
	}
	cout << endl;
}

int main()
{
	////test1();
	//test2();
	////test3();

	test4();
	//testmap();
	cout << "+++++++++++++++++++++++++++++++++" << endl << endl;

	test5();

	return 0;
}
